from functools import reduce

# 内置函数

# 1.range()
"""
range(stop)
range(start, stop[, step])
参数说明：

start: 计数从 start 开始。默认是从 0 开始。例如range（5）等价于range（0， 5）;
stop: 计数到 stop 结束，但不包括 stop。例如：range（0， 5） 是[0, 1, 2, 3, 4]没有5
step：步长，默认为1。例如：range（0， 5） 等价于 range(0, 5, 1)
"""
# 仅指定结束值，默认从0开始，不包括结束值
for i in range(5):
    print(i, end=' ')  # 0,1,2,3,4
print()
# 指定起始值
for i in range(2, 5):
    print(i, end=' ')  # 2,3,4
print()
# 指定步长
for i in range(1, -20, -3):
    print(i, end=' ')  # 1,-2,-5,-8,-11,-14,-17
print()
print('-' * 10)

# 2.zip()
"""
zip() 函数用于将可迭代的对象作为参数，将对象中对应的元素打包成一个个元组，
然后返回由这些元组组成的对象，这样做的好处是节约了不少的内存。
可以使用 list() 转换来输出列表。

zip 语法：

zip([iterable, ...])
参数说明：iterabl -- 一个或多个迭代器;
返回值：返回一个对象。
"""
a = [1, 2, 3]
b = [4, 5, 6]
c = [1, 3, 5, 7, 9]
zipped = zip(a, b)
print(list(zipped))  # 一一对应
zipped = zip(a, c)  # 元素个数与最短的列表一致
print(list(zipped))  # 一一对应
zipped = zip(a, b, c)
print(list(zipped))  # 一一对应
print('-' * 10)

# 3.abs() 返回绝对值
# 4.bin() 返回二进制字符串
# 5.int() 返回整数值
# 6.oct() 返回八进制字符串
# 7.hex() 返回十六进制字符串
# 8.ord() 返回字符对应的ASCII码，例如:a -> 97
# 9.chr() 返回当前整数对应的ASCII字符，例如:97 -> a

# 10.sorted()
"""
sorted() 函数对所有可迭代的对象进行排序操作。
sorted 语法：

sorted(iterable, key=None, reverse=False)  
参数说明：

iterable -- 可迭代对象。
key -- 主要是用来进行比较的元素，只有一个参数，具体的函数的参数就是取自于可迭代对象中，指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则，reverse = True 降序 ， reverse = False 升序（默认）。
返回值
返回重新排序的列表。
"""

# 11.map()
"""
map() 函数会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数，返回包含每次 function 函数返回值的新列表。

语法:
以下是 map() 方法的语法:
    map(function, iterable, ...)
参数:
    function -- 函数
    iterable -- 一个或多个序列
返回值:返回一个迭代器。
"""


def square(x):  # 计算平方数
    return x ** 2


iterator = map(square, [1, 2, 3, 4, 5])  # 计算列表各个元素的平方
for i in iterator:
    print(i, end=' ')
print()

# 12.reduce()
"""
reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合（链表，元组等）中的所有数据进行下列操作：
用传给 reduce 中的函数 function（有两个参数）先对集合中的第 1、2 个元素进行操作，
得到的结果再与第三个数据用 function 函数运算，最后得到一个结果。

语法
reduce() 函数语法：
reduce(function, iterable[, initializer])
参数：
function -- 函数，有两个参数
iterable -- 可迭代对象
initializer -- 可选，初始参数
返回值：
返回函数计算结果。
"""


def add(x, y):  # 两数相加
    return x + y


sum = reduce(add, [1, 2, 3, 4, 5])  # 计算列表和：1+2+3+4+5
print(sum)

# 13.filter()
"""
filter() 函数用于过滤序列，过滤掉不符合条件的元素，返回一个迭代器对象，如果要转换为列表，可以使用 list() 来转换。

该接收两个参数，第一个为函数，第二个为序列，序列的每个元素作为参数传递给函数进行判断，
然后返回 True 或 False，最后将返回 True 的元素放到新列表中。

语法：
以下是 filter() 方法的语法:

filter(function, iterable)
参数：
function -- 判断函数。
iterable -- 可迭代对象。
返回值：返回一个迭代器对象
"""


# 过滤出列表中的所有奇数：
def is_odd(n):
    return n % 2 == 1


tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
newlist = list(tmplist)
print(newlist)
